package Person.ith_19;
/*异常的处理
* java异常处理的五个关键字：throw try catch finally throw
*throw:抛出异常，具体怎么操作
* 1.创建一个异常对象，封装一些提示信息（信息可以自己写）
* 2.需要将这个异常告知调用者，怎么告知呢？通过throw关键字就可以完成
*
* throw的用法：用来抛出一个异常对象，将这个对象传递给调用者，并结束方法的执行。
* throw 用在方法内部
* 使用格式：
* throw new 异常类名（“异常产生的原因”）;
* 注意：1.throw关键字必须用在方法内部
*      2.throw后面new 产生的对象必须是Exeption或Exception的子类
*      3.throw关键字抛出的是RuntimeException（运行时异常）或者是它的子类，我们可以不处理，默认交给jvm处理
*     （打印异常信息，中断程序）
*throw关键字抛出的是编译时异常（写代码时就报错），我们就必须处理这个异常要么throws  要么
*  try  catch
*
*
* NullPointerException  是运行时异常我们不用处理，交给jvm来处理；
* */
public class demo2 {
    public static void main(String[] args) {
     int [] arr={1,2,3};
//        int[] arr = null;

      int e =  getElement(arr,3);


    }
    private static int getElement(int[] arr,int index){
        /*我们对传递过来的数组进行合法式校验
        * 如果arr是null  那么我们就抛出空指针异常，
        * */
        if(arr==null){
            throw new NullPointerException("null");
        }
        /*
        * 对传递过来的参数index进行合法校验
        * 如果index的范围不在数组索引的范围之内，我们就给出数组索引越界异常，告知方法的调用者传递的索引超出了数组的使用范围（简称 “索引越界”）
        * */
        if(index<0 ||index>arr.length-1){
            throw new ArrayIndexOutOfBoundsException("索引越界");
        }

        int ele = arr[index];
        return ele;
    }
}
